'''
装饰器模式（Decorator Pattern）允许向一个现有的对象添加新的功能，同时又不改变其结构。
这种类型的设计模式属于结构型模式，它是作为现有的类的一个包装。
动态地给一个对象添加一些额外的职责。就增加功能来说，装饰器模式相比生成子类更为灵活。

'''
import time
"""
def deco(func):
    def wrapper():
        func()
        print('我是装饰器中的函数')
    return wrapper


@deco
def func():
    print("hello")
    print("world")

if __name__ == '__main__':
    f = func #这里f被赋值为func，执行f()就是执行func()
    f()
"""
def Singleton(cls):
    _instance = {}
    def _singleton(*args, **kargs):
        if cls not in _instance:
            _instance[cls] = cls(*args, **kargs)
        return _instance[cls]
    return _singleton

@Singleton
class Leader(object):
    def __init__(self):
        pass

leader1 = Leader()
leader2 = Leader()
print(leader1,leader2)

'''
这是两个个很简单的装饰器
总结：装饰器就是将要装饰的目标包裹起来，添加一些代码，使其具备一些原本代码没有实现的功能
但又不更改原代码。
'''